import path from 'path'
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
import autoprefixer from 'autoprefixer'
import svgr from 'vite-plugin-svgr'
import windi from 'vite-plugin-windicss'
import viteEslint2 from 'vite-plugin-eslint2'
import tsconfigPaths from 'vite-tsconfig-paths'
import viteImagemin from 'vite-plugin-imagemin'
import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'
// import viteStylelint from '@amatlash/vite-plugin-stylelint'

// 用 normalizePath 解决路径问题，相当于得到绝对路径，适用于@import 方式
// const variablePath = normalizePath(path.resolve('./src/styles/variable.scss'))

const isProduction = process.env.NODE_ENV === 'production'
// 填入项目的 CDN 域名地址
const CDN_URL = 'https://gitee.com/laichangmeng/projects'

// https://vite.dev/config/
export default defineConfig({
  base: isProduction ? CDN_URL : '/',
  resolve: {
    alias: {
      '@': path.join(__dirname, 'src')
    }
  },
  build: {
    assetsInlineLimit: 8 * 1024 // 8kb 默认4kb
  },
  plugins: [
    react({
      babel: {
        plugins: ['babel-plugin-styled-components', '@emotion/babel-plugin']
      },
      // 注意: 对于 emotion，需要单独加上这个配置
      // 通过 `@emotion/react` 包编译 emotion 中的特殊 jsx 语法
      jsxImportSource: '@emotion/react'
    }),
    tsconfigPaths(),
    svgr({
      svgrOptions: {
        exportType: 'default', // 确保默认导出组件
        icon: true
      }
    }),
    windi(),
    viteImagemin({
      // 无损压缩配置，无损压缩下图片质量不会变差
      // optipng: {
      //   optimizationLevel: 3 // 0-7
      // },
      // 有损压缩配置，有损压缩下图片质量可能会变差
      pngquant: {
        quality: [0.8, 0.9],
        speed: 4
      },
      mozjpeg: { quality: 80 }, // 添加 JPG 压缩
      // svg 优化
      svgo: {
        plugins: [
          {
            name: 'removeViewBox'
          },
          {
            name: 'removeEmptyAttrs',
            active: false
          }
        ]
      }
    }),
    createSvgIconsPlugin({
      iconDirs: [path.join(__dirname, 'src/assets/icons')]
    }),
    viteEslint2()
    // viteStylelint({
    //   // 对某些文件排除检查
    //   exclude: /windicss|node_modules/
    // }),
  ],
  css: {
    modules: {
      generateScopedName: '[name]__[local]___[hash:base64:5]'
    },
    preprocessorOptions: {
      scss: {
        // additionalData: `@import "${variablePath}";`
        additionalData: "@use '../../styles/variable' as vars;"
      }
    },
    postcss: {
      plugins: [
        autoprefixer({
          // 指定目标浏览器版本
          overrideBrowserslist: ['> 1%', 'last 2 versions']
        })
      ]
    }
  }
})
